1283F - DIY Garland - CodeForces Solution


constructive algorithms greedy trees *2200

Please click on ads to support us..

C++ Code:

  #include <bits/stdc++.h> 
using namespace std;
using ll =long long;
#define all(v) v.begin(),v.end()
 #define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)

ll INF=2e15;


int main() {
    ios::sync_with_stdio(false);
  cin.tie(0);

ll n;cin>>n;
vector<ll> a(n-1);
for(ll i=0;i<n-1;i++) cin>>a[i];

ll root=a[0];
ll now=root;

vector<bool> note(n+10);
note[root]=true;

vector<pair<ll,ll>> ans;
ll ind=1;

for(ll i=n;i>=1;i--) {
  if(note[i]) continue;

while(ind<n-1&&!note[i]) {
  if(!note[a[ind]]) {
    ans.push_back(make_pair(now,a[ind]));
    note[a[ind]]=true;
    now=a[ind];
  }

  else {
    ans.push_back(make_pair(now,i));
    note[i]=true;
    now=a[ind];
  }
  ind++;
}

if(ind==n-1&&!note[i]) {
  ans.push_back(make_pair(now,i));
  note[i]=true;

}

if(!note[i]) {
  cout<<-1<<endl;
  return 0;
}


}

cout<<root<<endl;
for(auto x:ans) cout<<x.first<<" "<<x.second<<endl;
}





Comments

Submit
0 Comments
More Questions

112. Path Sum
1556A - A Variety of Operations
136. Single Number
169. Majority Element
119. Pascal's Triangle II
409. Longest Palindrome
1574A - Regular Bracket Sequences
1574B - Combinatorics Homework
1567A - Domino Disaster
1593A - Elections
1607A - Linear Keyboard
EQUALCOIN Equal Coins
XOREQN Xor Equation
MAKEPAL Weird Palindrome Making
HILLSEQ Hill Sequence
MAXBRIDGE Maximise the bridges
WLDRPL Wildcard Replacement
1221. Split a String in Balanced Strings
1002. Find Common Characters
1602A - Two Subsequences
1555A - PizzaForces
1607B - Odd Grasshopper
1084A - The Fair Nut and Elevator
1440B - Sum of Medians
1032A - Kitchen Utensils
1501B - Napoleon Cake
1584B - Coloring Rectangles
1562B - Scenes From a Memory
1521A - Nastia and Nearly Good Numbers
208. Implement Trie